﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using DataAccessLayer.DataInterfaces;
using MyCommon;

namespace DataAccessLayer
{
    public class NhanVienDAO : INhanVien
    {
        private static QLBaoHanh dataContext;
        private IRepository<NhanVien> repository;
        public NhanVienDAO()
        {
            dataContext = new QLBaoHanh();
            repository = new RepositoryDAO<NhanVien>(dataContext);
        }

        //public IEnumerable<NhanVien> GetAllNhanVien()
        //{
        //    return repository.GetBy(aobj => aobj.isDelete == false);
        //}

        public IEnumerable<NhanVien> GetAllNhanVien()
        {
            return dataContext.NhanViens.Where( aobj => aobj.isDelete == false).OrderBy(bobj => bobj.Ten).Select(c => (NhanVien)c);
        }

        public NhanVien GetNhanVienById(int Id)
        {
            return repository.Find(obj => obj.Id == Id).Single();
        }
        public NhanVien GetLastRecord()
        {
            return dataContext.NhanViens.OrderByDescending(obj => obj.Id).FirstOrDefault();
        }

        public bool UpdateNhanVien(NhanVien inNhanVien)
        {
            if (inNhanVien == null) return false;
            NhanVien upNhanVien = repository.First(sobj => sobj.Id == inNhanVien.Id);
            if (upNhanVien == null) return false;
            upNhanVien = inNhanVien;
            return repository.SaveChanges() > 0;
        }
        public bool InsertNhanVien(NhanVien inNhanVien)
        {
            if (inNhanVien == null) return false;
            inNhanVien.isDelete = false;
            repository.Add(inNhanVien);
            return repository.SaveChanges() > 0;
        }

        public ReturnValue<bool> DelNhanVien(int Id)
        {
            ReturnValue<bool> ret = new ReturnValue<bool>(false, "");
            try
            {
                NhanVien objDel = repository.First(obj => obj.Id == Id);
                ret = DelNhanVien(objDel);
            }
            catch (Exception ex)
            {
                ret.RetValue = false;
                ret.Msg = "Dữ liệu đã được sử dung trong chương trình - không thể xóa !";
            }
            return ret;
        }


        public ReturnValue<bool> DelNhanVien(NhanVien inNhanVien)
        {
            ReturnValue<bool> ret = new ReturnValue<bool>(false, "");
            if (inNhanVien == null)
            {
                ret.Msg = "input null";
                return ret;
            }
            try
            {
                repository.Delete(inNhanVien);
                ret.RetValue = repository.SaveChanges() > 0;
            }
            catch (System.Exception ex)
            {
                ret.RetValue = false;
                ret.Msg = "Dữ liệu đã được sử dung trong chương trình - không thể xóa !";
            }
            return ret;
        }

        public NhanVien GetNhanVienByAccountId(int Id)
        {
            return repository.Find(obj => obj.NguoiDungId == Id).SingleOrDefault();
        }
    }
}
